<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 1、url 生成
//  如果当前域名的顶级域名不是 hiyiku.com 则常规生成
//  如果当前域名的顶级域名是 hiyiku.com 则二级域名生成（且二级域名只能有 bend/manage两个，其他按常规域名生成）


// 2、路由
//  如果当前域名的顶级域名不是 hiyiku.com 则常规访问
//  如果当前域名的顶级域名是 hiyiku.com 且二级域名是bend/manage两个，按二级域名访问，否则按常规访问


// 获取二级域名
//   二级域名跳转是针对页面来使用的，所以只需要在这里设置当没有传递控制器这些的时候，根据二级域名指定模块就好

// 接口
Route::match(
    ['post', 'get',],
    '/{module?}/{controller?}/{action?}/{param?}',
    function($module = 'app', $controller = 'frontend', $action = 'index') {
        if($action){
            $action = str_replace('.html', '', $action);
        }
        if($controller){
            $controller = str_replace('.html', '', $controller);
        }

        $request = request();
        $ip      = $request->ip();
        try{
            $post = $request->all();
            // 控制器   中划线 => 驼峰式:大小写
            $controller = ucfirst($controller);
            $file       = 'App\Http\Controllers\\'.ucfirst($module).'\\'.$controller.'Controller';

            // 控制器   中划线 => 驼峰式:大小写
            $file   = str_replace(' ', '', ucwords(str_replace('-', ' ', $file)));
            $action = str_replace(' ', '', ucwords(str_replace('-', ' ', $action)));
            $action = lcfirst($action);
            // 判断文件是是否存在
            $path = '../'.$file.'.php';
            $path = str_replace('App', 'app', $path);
            $path = str_replace('\\', '/', $path);
            if(!is_file($path)){
                // echo $file.'类不存在！！';
                throw new \RuntimeException($file.'类文件不存在！！', 400);
            }

            // 判断类是否存在
            if(!class_exists($file)){
                // echo $file.'类不存在！！';
                throw new \RuntimeException($file.'类不存在！！', 400);
            }
            if(!method_exists($file, $action)){
                // echo $action.'方法不存在！！';
                throw new \RuntimeException($action.'方法不存在！！', 400);
            }

            //var_dump($file);die;
            // 执行请求
            $file   = App::make($file);
            $result = $file->$action();

            //$result = $file->$action($post);

            return $result;
        } catch(RuntimeException $e){
            if(!empty($e->getPrevious())){
                $e = $e->getPrevious();
            }
            if($ip == '127.0.0.1'){
                return ['code' => $e->getCode(), 'msg' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()];
            } else{
                return ['code' => $e->getCode(), 'msg' => $e->getMessage(), 'line' => $e->getLine()];
            }
        }
    }
)->where(['controller' => '[0-9a-zA-Z-\.]+', 'action' => '[0-9a-zA-Z-\.]+'])->name('appapi'); // 统一命令


